129 research outputs found
Erlang Code Evolution Control
During the software lifecycle, a program can evolve several times for
different reasons such as the optimisation of a bottle-neck, the refactoring of
an obscure function, etc. These code changes often involve several functions or
modules, so it can be difficult to know whether the correct behaviour of the
previous releases has been preserved in the new release. Most developers rely
on a previously defined test suite to check this behaviour preservation. We
propose here an alternative approach to automatically obtain a test suite that
specifically focusses on comparing the old and new versions of the code. Our
test case generation is directed by a sophisticated combination of several
already existing tools such as TypEr, CutEr, and PropEr; and other ideas such
as allowing the programmer to chose an expression of interest that must
preserve the behaviour, or the recording of the sequences of values to which
this expression is evaluated. All the presented work has been implemented in an
open-source tool that is publicly available on GitHub.Comment: Pre-proceedings paper presented at the 27th International Symposium
on Logic-Based Program Synthesis and Transformation (LOPSTR 2017), Namur,
Belgium, 10-12 October 2017 (arXiv:1708.07854
Slicing-Based Trace Analysis of Rewriting Logic Specifications with i Julienne
The final publication is available at Springer via http://dx.doi.org/10.1007/978-3-642-37036-6_7We present iJulienne, a trace analyzer for conditional rewriting
logic theories that can be used to compute abstract views of Maude
executions that help users understand and debug programs. Given a
Maude execution trace and a slicing criterion which consists of a set of
target symbols occurring in a selected state of the trace, iJulienne is
able to track back reverse dependences and causality along the trace in
order to incrementally generate highly reduced program and trace slices
that reconstruct all and only those pieces of information that are needed
to deliver the symbols of interest. iJulienne is also endowed with a trace
querying mechanism that increases flexibility and reduction power and
allows program runs to be examined at the appropriate level of abstraction.This work has been partially supported by the EU (FEDER) and the Spanish MEC project ref. TIN2010-21062-C02-02, and Generalitat Valenciana ref. PROMETEO2011/052, and was carried out during the tenure of D. Ballis’ ERCIM ”Alain Bensoussan” Postdoctoral Fellowship. The research leading to these results has received funding from the EU 7th Framework Programme (FP7/2007-2013) under agreement n. 246016. F. Frechina is supported by FPU-ME grant AP2010-5681.Alpuente Frasnedo, M.; Ballis, D.; Frechina, F.; Sapiña Sanchis, J. (2013). Slicing-Based Trace Analysis of Rewriting Logic Specifications with iJulienne. En Programming Languages and Systems. Springer. 121-124. https://doi.org/10.1007/978-3-642-37036-6_7S121124Alpuente, M., Ballis, D., Espert, J., Romero, D.: Model-Checking Web Applications with Web-TLR. In: Bouajjani, A., Chin, W.-N. (eds.) ATVA 2010. LNCS, vol. 6252, pp. 341–346. Springer, Heidelberg (2010)Alpuente, M., Ballis, D., Espert, J., Romero, D.: Backward Trace Slicing for Rewriting Logic Theories. In: Bjørner, N., Sofronie-Stokkermans, V. (eds.) CADE 2011. LNCS, vol. 6803, pp. 34–48. Springer, Heidelberg (2011)Alpuente, M., Ballis, D., Frechina, F., Romero, D.: Backward Trace Slicing for Conditional Rewrite Theories. In: Bjørner, N., Voronkov, A. (eds.) LPAR-18 2012. LNCS, vol. 7180, pp. 62–76. Springer, Heidelberg (2012)Alpuente, M., Ballis, D., Frechina, F., Romero, D.: Julienne: A Trace Slicer for Conditional Rewrite Theories. In: Giannakopoulou, D., Méry, D. (eds.) FM 2012. LNCS, vol. 7436, pp. 28–32. Springer, Heidelberg (2012)Alpuente, M., Ballis, D., Frechina, F., Romero, D.: Using Conditional Trace Slicing for Improving Maude Programs. Science of Comp. Progr. (to appear, 2013)The i julienne website (2013), http://safe-tools.dsic.upv.es/iJulienneKorel, B., Laski, J.: Dynamic Program Slicing. Inf. Process. Lett. 29(3), 155–163 (1988
Testing an Intentional Naming Scheme Using Genetic Algorithms
Abstract. Various attempts have been made to use genetic algorithms (GAs) for software testing, a problem that consumes a large amount of time and eort in software development. We demonstrate the use of GAs in automating testing of complex data structures and methods for manipulating them, which to our knowledge has not been successfully displayed before on non-trivial software structures. We evaluate the ef-fectiveness of our GA-based test suite generation technique by applying it to test the design and implementation of the Intentional Naming Sys-tem (INS), a new scheme for resource discovery and service location in a dynamic networked environment. Our analysis using GAs reveals serious problems with both the design of INS and its inventors ' implementation.
Using Relational Verification for Program Slicing
Program slicing is the process of removing statements from a program such that defined aspects of its behavior are retained. For producing precise slices, i.e., slices that are minimal in size, the program\u27s semantics must be considered. Existing approaches that go beyond a syntactical analysis and do take the semantics into account are not fully automatic and require auxiliary specifications from the user. In this paper, we adapt relational verification to check whether a slice candidate obtained by removing some instructions from a program is indeed a valid slice. Based on this, we propose a framework for precise and automatic program slicing. As part of this framework, we present three strategies for the generation of slice candidates, and we show how dynamic slicing approaches - that interweave generating and checking slice candidates - can be used for this purpose. The framework can easily be extended with other strategies for generating slice candidates. We discuss the strengths and weaknesses of slicing approaches that use our framework
System dependence graphs in sequential Erlang
The system dependence graph (SDG) is a data structure used in the imperative paradigm for different static analysis, and particularly, for program slicing. Program slicing allows us to determine the part of a program (called slice) that influences a given variable of interest. Thanks to the SDG, we can produce precise slices for interprocedural programs. Unfortunately, the SDG cannot be used in the functional paradigm due to important features that are not considered in this formalism (e.g., pattern matching, higher-order, composite expressions, etc.). In this work we propose the first adaptation of the SDG to a functional language facing these problems. We take Erlang as the host language and we adapt the algorithms used to slice the SDG to produce precise slices of Erlang interprocedural programs. As a proof-of-concept, we have implemented a program slicer for Erlang based on our SDGs.This work has been partially supported by the Spanish Ministerio de Ciencia e
Innovaci´on under grant TIN2008-06622-C03-02 and by the Generalitat Valenciana
under grant PROMETEO/2011/052. Salvador Tamarit was partially supported by
the Spanish MICINN under FPI grant BES-2009-015019Silva Galiana, JF.; Tamarit Muñoz, S.; Tomás Franco, C. (2012). System dependence graphs in sequential Erlang. En Fundamental Approaches to Software Engineering. Springer Verlag (Germany). 486-500. https://doi.org/10.1007/978-3-642-28872-2_33S486500Agrawal, H., Horgan, J.R.: Dynamic program slicing. In: Programming Language Design and Implementation (PLDI), pp. 246–256 (1990)Brown, C.: Tool Support for Refactoring Haskell Programs. PhD thesis, School of Computing, University of Kent, Canterbury, Kent, UK (2008)Cheda, D., Silva, J., Vidal, G.: Static slicing of rewrite systems. Electron. Notes Theor. Comput. Sci. 177, 123–136 (2007)Ferrante, J., Ottenstein, K.J., Warren, J.D.: The Program Dependence Graph and Its Use in Optimization. ACM Transactions on Programming Languages and Systems 9(3), 319–349 (1987)Field, J., Ramalingam, G., Tip, F.: Parametric program slicing. In: Proceedings of the 22nd ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, POPL 1995, pp. 379–392. ACM, New York (1995)Horwitz, S., Reps, T., Binkley, D.: Interprocedural slicing using dependence graphs. ACM Transactions Programming Languages and Systems 12(1), 26–60 (1990)Korel, B., Laski, J.: Dynamic Program Slicing. Information Processing Letters 29(3), 155–163 (1988)Larsen, L., Harrold, M.J.: Slicing object-oriented software. In: Proceedings of the 18th International Conference on Software Engineering, ICSE 1996, pp. 495–505. IEEE Computer Society, Washington, DC (1996)Liang, D., Harrold, M.J.: Slicing objects using system dependence graphs. In: Proceedings of the International Conference on Software Maintenance, ICSM 1998, pp. 358–367. IEEE Computer Society, Washington, DC (1998)Lindahl, T., Sagonas, K.F.: Typer: a type annotator of erlang code. In: Sagonas, K.F., Armstrong, J. (eds.) Erlang Workshop, pp. 17–25. ACM (2005)Lindahl, T., Sagonas, K.F.: Practical type inference based on success typings. In: Bossi, A., Maher, M.J. (eds.) PPDP, pp. 167–178. ACM (2006)Ochoa, C., Silva, J., Vidal, G.: Dynamic slicing based on redex trails. In: Proceedings of the 2004 ACM SIGPLAN Symposium on Partial Evaluation and Semantics-Based Program Manipulation, PEPM 2004, pp. 123–134. ACM, New York (2004)Reps, T., Turnidge, T.: Program Specialization via Program Slicing. In: Danvy, O., Thiemann, P., Glück, R. (eds.) Dagstuhl Seminar 1996. LNCS, vol. 1110, pp. 409–429. Springer, Heidelberg (1996)Rodrigues, N.F., Barbosa, L.S.: Component identification through program slicing. In: Proc. of Formal Aspects of Component Software (FACS 2005). Elsevier ENTCS, pp. 291–304. Elsevier (2005)Tip, F.: A survey of program slicing techniques. Journal of Programming Languages 3(3), 121–189 (1995)Tóth, M., Bozó, I., Horváth, Z., Lövei, L., Tejfel, M., Kozsik, T.: Impact Analysis of Erlang Programs Using Behaviour Dependency Graphs. In: Horváth, Z., Plasmeijer, R., Zsók, V. (eds.) CEFP 2009. LNCS, vol. 6299, pp. 372–390. Springer, Heidelberg (2010)Walkinshaw, N., Roper, M., Wood, M., Roper, N.W.M.: The java system dependence graph. In: Third IEEE International Workshop on Source Code Analysis and Manipulation, p. 5 (2003)Weiser, M.: Program Slicing. In: Proceedings of the 5th International Conference on Software Engineering, pp. 439–449. IEEE Press (1981)Widera, M.: Flow graphs for testing sequential erlang programs. In: Proceedings of the 2004 ACM SIGPLAN Workshop on Erlang, ERLANG 2004, pp. 48–53. ACM, New York (2004)Widera, M., Informatik, F.: Concurrent erlang flow graphs. In: Proceedings of the Erlang/OTP User Conference (2005)Zhao, J.: Slicing aspect-oriented software. In: Proceedings of the 10th International Workshop on Program Comprehension, IWPC 2002, pp. 251–260. IEEE Computer Society, Washington, DC (2002
Responsibility Analysis by Abstract Interpretation
Given a behavior of interest in the program, statically determining the
corresponding responsible entity is a task of critical importance, especially
in program security. Classical static analysis techniques (e.g. dependency
analysis, taint analysis, slicing, etc.) assist programmers in narrowing down
the scope of responsibility, but none of them can explicitly identify the
responsible entity. Meanwhile, the causality analysis is generally not
pertinent for analyzing programs, and the structural equations model (SEM) of
actual causality misses some information inherent in programs, making its
analysis on programs imprecise. In this paper, a novel definition of
responsibility based on the abstraction of event trace semantics is proposed,
which can be applied in program security and other scientific fields. Briefly
speaking, an entity ER is responsible for behavior B, if and only if ER is free
to choose its input value, and such a choice is the first one that ensures the
occurrence of B in the forthcoming execution. Compared to current analysis
methods, the responsibility analysis is more precise. In addition, our
definition of responsibility takes into account the cognizance of the observer,
which, to the best of our knowledge, is a new innovative idea in program
analysis.Comment: This is the extended version (33 pages) of a paper to be appeared in
the Static Analysis Symposium (SAS) 201
- …